﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ubatic.Contracts.Contracts;
using Ubatic.Contracts.Services;
using Ubatic.ServiceFactory;
using Web.Framework;
using Web.Framework.Mapper;
using Ubatic.UI.Code;

namespace Ubatic.UI.App
{
    public partial class ProyectoGeneral : System.Web.UI.Page
    {
        private const string pagListado = "/Proyecto.aspx";

        private IConvocatoriaService convocatoriaSvc = null;

        public ProyectoDatoPrincipalDto DatoPrincipalCurrent
        {
            get
            {
                return (ProyectoDatoPrincipalDto)ViewState["DatoPrincipal"];
            }
            set
            {
                ViewState["DatoPrincipal"] = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            //HasPermissionToSeeMe(Operaciones.UsuarioDetalle);
            try
            {
                convocatoriaSvc = Factory.GetConvocatoriaService();

                if (!this.IsPostBack)
                {
                    DatoPrincipalCurrent = convocatoriaSvc.ObtenerProyectoDatoPrincipal(Convert.ToInt64(this.Request.QueryString["Id"]));

                    InicializarListControls();
                    Bindear();
                }

            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private void InicializarListControls()
        {
            IListService listService = Factory.GetListService();
            List<LineaTrabajoDto> lineasTrabajo = listService.ObtenerLineasTrabajo();
            UIHelper.LoadCbo(lineasTrabajo, this.ddlLineaTrabajoId, "-Selecccionar-");

            List<DependenciaDto> dependencias = listService.ObtenerDependencias();
            UIHelper.LoadCbo(dependencias, this.ddlDependenciaId, "-Selecccionar-");

            CargarPalabrasClave();

            CargarAreaConocimiento();

            CargarAsignaturas();
        }

        private void CargarAsignaturas()
        {
            this.GridAsignaturas.DataSource = convocatoriaSvc.ObtenerAsignaturas(DatoPrincipalCurrent.ProyectoVersionId);
            this.GridAsignaturas.DataBind();
        }

        private void CargarAreaConocimiento()
        {
            this.GridAreaConocimiento.DataSource = convocatoriaSvc.ObtenerAreaConocimientos(DatoPrincipalCurrent.ProyectoVersionId);
            this.GridAreaConocimiento.DataBind();
        }

        private void CargarPalabrasClave()
        {
            this.GridPalabrasClave.DataSource = convocatoriaSvc.ObtenerPalabrasClave(DatoPrincipalCurrent.ProyectoVersionId);
            this.GridPalabrasClave.DataBind();
        }

        private void Bindear()
        {
            if (DatoPrincipalCurrent.Id != 0)
            {
                EntityMapper.Map(DatoPrincipalCurrent, this);
            }
        }

        private void SetData()
        {
            EntityMapper.Map(this, DatoPrincipalCurrent);
        }

        private void Save()
        {
            Factory.GetConvocatoriaService().GuardarProyectoDatoPrincipal(DatoPrincipalCurrent);
        }

        private bool Validar()
        {
            return true;
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                try
                {
                    SetData();
                    if (Validar())
                    {
                        Save();
                    }
                    this.RedirectToPagListado();
                    //ShowMessage("Los datos fueron grabados con éxito", WebMessageType.Notification);
                }
                catch (Exception ex)
                {
                    ExceptionManager.Instance.HandleException(ex);
                }
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            RedirectToPagListado();
        }

        private void RedirectToPagListado()
        {
            try
            {
                Navigation.NavigateTo(string.Format("{0}?Id={1}", pagListado, DatoPrincipalCurrent.ProyectoId));
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void btnPalabraClaveAgregar_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.txtPalabraClaveAgregar.Text.Trim()))
            {
                PalabraClaveDto dto = new PalabraClaveDto();
                dto.Nombre = this.txtPalabraClaveAgregar.Text.Trim();
                dto.ProyectoVersionId = this.DatoPrincipalCurrent.ProyectoVersionId;

                convocatoriaSvc.AgregarPalabraClave(dto);
                this.CargarPalabrasClave();
            }
        }

        protected void btnAreasDeConocimientoAgregar_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.txtAreasDeConocimientoAgregar.Text.Trim()))
            {
                AreaConocimientoDto dto = new AreaConocimientoDto();
                dto.Nombre = this.txtAreasDeConocimientoAgregar.Text.Trim();
                dto.ProyectoVersionId = this.DatoPrincipalCurrent.ProyectoVersionId;

                convocatoriaSvc.AgregarAreaConocimiento(dto);
                this.CargarAreaConocimiento();
            }
        }

        protected void btnAsignaturaAgregar_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.txtAsignaturaAgregar.Text.Trim()))
            {
                AsignaturaDto dto = new AsignaturaDto();
                dto.Nombre = this.txtAsignaturaAgregar.Text.Trim();
                dto.ProyectoVersionId = this.DatoPrincipalCurrent.ProyectoVersionId;

                convocatoriaSvc.AgregarAsignatura(dto);
                this.CargarAsignaturas();
            }
        }

        protected void GridPalabrasClave_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                long palabraClaveId = Convert.ToInt64(this.GridPalabrasClave.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                if (e.CommandName == "eliminar")
                {
                    convocatoriaSvc.EliminarPalabraClave(DatoPrincipalCurrent.ProyectoVersionId, palabraClaveId);
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridAreaConocimiento_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                long areaConocimientoId = Convert.ToInt64(this.GridAreaConocimiento.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                if (e.CommandName == "eliminar")
                {
                    convocatoriaSvc.EliminarAreaConocimiento(DatoPrincipalCurrent.ProyectoVersionId, areaConocimientoId);
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridAsignaturas_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                long asignaturaId = Convert.ToInt64(this.GridAsignaturas.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                if (e.CommandName == "eliminar")
                {
                    convocatoriaSvc.EliminarAsignatura(DatoPrincipalCurrent.ProyectoVersionId, asignaturaId);
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void btnVolver_Click(object sender, EventArgs e)
        {
            RedirectToPagListado();
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                try
                {
                    SetData();
                    if (Validar())
                    {
                        Save();
                    }
                }
                catch (Exception ex)
                {
                    ExceptionManager.Instance.HandleException(ex);
                }
            }
        }

        protected void btnGuardaryContinuar_Click(object sender, EventArgs e)
        {

        }
    }
}